package negocio
import grails.converters.JSON

class UsuarioController  extends BaseSecureController{

    static allowedMethods = [save: "POST", update: "POST", delete: "POST",handleLogin:"POST",handleRegistration:"POST"]
    def facebookGraphService
    
    def index = {
        redirect(action: "list", params: params)
    }

    def list = {
        params.max = Math.min(params.max ? params.int('max') : 10, 100)
        [usuarioInstanceList: Usuario.list(params), usuarioInstanceTotal: Usuario.count()]
    }

    def create = {
        def usuarioInstance = new Usuario()
        usuarioInstance.properties = params
        return [usuarioInstance: usuarioInstance]
    }

    def save = {
        /*def usuarioInstance = new Usuario(params)
        if (usuarioInstance.save(flush: true)) {
            flash.message = "${message(code: 'default.created.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])}"
            redirect(action: "show", id: usuarioInstance.id)
        }
        else {
            render(view: "create", model: [usuarioInstance: usuarioInstance])
        }*/
        redirect(action: "handleRegistration", params: params)
    }

    def show = {
        def usuarioInstance = Usuario.get(params.id)
        if (!usuarioInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action: "list")
        }
        else {
            [usuarioInstance: usuarioInstance]
        }
    }

    def edit = {
        params.id?params.id:this.&getUserLogged().id
        def usuarioInstance = Usuario.get(params.id)
        if (!usuarioInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action: "list")
        }
        else {
            return [usuarioInstance: usuarioInstance]
        }
    }

    def update = {
        def usuarioInstance = Usuario.get(params.id)
        if (usuarioInstance) {
            if (params.version) {
                def version = params.version.toLong()
                if (usuarioInstance.version > version) {

                    usuarioInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'usuario.label', default: 'Usuario')] as Object[], "Another user has updated this Usuario while you were editing")
                    render(view: "edit", model: [usuarioInstance: usuarioInstance])
                    return
                }
            }
            usuarioInstance.properties = params
            if (!usuarioInstance.hasErrors() && usuarioInstance.save(flush: true)) {
                flash.message = "${message(code: 'default.updated.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])}"
                redirect(action: "show", id: usuarioInstance.id)
            }
            else {
                render(view: "edit", model: [usuarioInstance: usuarioInstance])
            }
        }
        else {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action: "list")
        }
    }

    def delete = {
        def usuarioInstance = Usuario.get(params.id)
        if (usuarioInstance) {
            try {
                usuarioInstance.delete(flush: true)
                flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                redirect(action: "list")
            }
            catch (org.springframework.dao.DataIntegrityViolationException e) {
                flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
                redirect(action: "show", id: params.id)
            }
        }
        else {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), params.id])}"
            redirect(action: "list")
        }
    }
    def login={
        //redirecionar para a home se o usuario estiver logado
        if(this.&getUserLogged())  {
         redirect(controller:'evento', action:'list')
     }
    }
    def handleLogout={
        if(this.&getUserLogged()){
            this.&logout()
            redirect(uri:'/')
        }
    }
  def handleLogin = {
      //colocar o usuário na sessão
    def user = Usuario.findByEmail( params.email )
    if(user )  {
       if(user.senha == params.senha) {
           this.&login(user)
           redirect(controller:'evento', action:'list')
        }
       else {
         flash.message = "Senha errada para ${params.email}"
         redirect(action:login)
       }
    }
    else {
      flash.message = "usuário não encontrado para o login${params.email}"
      redirect(action:login)
    }
  }

  def register = {
      render(view:'create')
  }

  def handleRegistration = {
    def usuarioInstance = new Usuario(params)
        if (usuarioInstance.save(flush: true)) {
            flash.message = "${message(code: 'default.created.message', args: [message(code: 'usuario.label', default: 'Usuario'), usuarioInstance.id])}"
            //cadastro realizado com sucesso
            redirect(action: "show", id: usuarioInstance.id)
        }
        else {
            //falha no cadastro
            render(view: "create", model: [usuarioInstance: usuarioInstance])
        }
  }
  def handleLoginFacebook={
      if(facebookGraphService){
          println "chamou o facebook"
          //pega os dados do usuário conectado ao facebook
          Usuario userTem= new Usuario()
          //verifica se o usuário está conectado ao facebook
          if(session.facebook){
              println "chamou a sessao"
            //pega os dados do usuário
            def userFace = JSON.parse (facebookGraphService.getFacebookProfile().toString() )
            //seta os dados para criar um novo usuário
            userTem.setIdPerfilFace(userFace.id)
            userTem.setEmail(userFace.email)
            userTem.setNome(userFace.name)
            //verifica se o email existe
            if(userTem.email){
                //verifica se o usuário existe na base de dados
                Usuario user = Usuario.findByEmail( userTem?.getEmail())
                if(user){
                    //loga o usuário na sessão
                    this.&login(user)
                }
                else{
                //cria um usuario
                userTem.save(flush:true)
                //busca o usuário
                user = Usuario.findByEmail( userTem.email )
                //loga o usuario
                this.&login(user)
                }
                //redireciona para a pagina inicial
                redirect(controller:'evento',action:'list')
            }
        }
        else{
            redirect(action:'login')
        }
           
      }
      println "chamou o control"
  }

    def recuperarSenha={
        String mail=params.email
        def user =Usuario.findByEmail(mail)
    if(user)  {
        def senha = user.senha
        def email = user.email
        sendMail {
            to email
            subject "Recuperação de Senha ccEvents"
            body "Sua senha de recuperação é: ${senha}"
        } 
           flash.message = "Sua senha foi enviada para o: ${params.email}"
           redirect(action:'login')
    }
    else {
        flash.message = "usuário não encontrado para o login${params.email}"
        redirect(action:'login')
    }
        
        
    }

    def esqueceusenha={

   }
}
